package com.mj.listen1._04队列;

import com.mj.listen1._04队列.list.LinkList;
import com.mj.listen1._04队列.list.List;

/**
 * 双端队列
 *
 * @param <E>
 */
public class DQueue<E> {

    // 底层使用双向链表
    private List<E> list = new LinkList<>();

    public int size() {
        return list.size();
    }

    public boolean isEmpty() {
        return list.isEmpty();
    }

    public void clear() {
        list.clear();
    }

    /**
     * 在尾部入队
     *
     * @param element
     */
    public void enQueueRear(E element) {
        list.add(element);
    }

    /**
     * 在头部出队
     */
    public E deQueueFront() {
        return list.remove(0);
    }

    /**
     * 在头部入队
     *
     * @param element
     */
    public void enQueueFront(E element) {
        list.add(0, element);
    }

    /**
     * 在尾部出队
     */
    public E deQueueRear() {
        return list.remove(list.size() - 1);
    }

    /**
     * 查看头部元素
     *
     * @return
     */
    public E front() {
        return list.get(0);
    }

    /**
     * 查看尾部元素
     *
     * @return
     */
    public E rear() {
        return list.get(list.size() - 1);
    }
}
